package design_pattern.decorator.demo01;

import java.util.Objects;

/**
 * @version 1.0.0
 * Created by cyd on 2022-06-06 11:25:25
 * @ClassName : design_pattern.decorator.demo01.Decorator
 * @Description : 装饰器，可以是抽象类或者具体类
 *
 * 用抽象类更好，因为它的作用并不是直接使用，而是在幕后调用Component（实际上是ConcreteComponent）的方法
 */
public abstract class Decorator implements Component {

    protected Component component;

    /**
     * 设置基础组件
     */
    public void setComponent(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        // Decorator实际上是执行Component的方法，相当于一个代理
        if (!Objects.isNull(component)) {
            component.operation();
        }
    }
}
